iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0
佛心分享-IT 人自學之術

自學swift語法系列 第 28

Day28-屬性包裝 Property Wrapper 介紹

  • 分享至 

  • xImage
  •  

Property Wrapper 建立

  • 在類型前加上 @propertyWrapper。
  • 需要有一個至少可以 get 的 wrappedValue 屬性,並設計對應的、需要重複利用的 set/get/willSet/didSet。
  • 可以加上 projectedValue 屬性,這個屬性會透過$投射出去。
  • 自己建立 init 時,把 wrappedValue 放最前面的參數。
  • 使用 struct 自動的 init 時,把 wrappedValue 放在最上面。

套用 Property Wrapper

  • 在需要的屬性前方加上 @Wrapper 名稱。
    @Wrapper var a = 0
    @Wrapper(wrapperValue: 0) var b
  • 會多出一個底線開頭版本的私有屬性,是這個 struct wrapper 本身。
  • 如果有設定 projectedValue 則會多出$開頭版本的屬性,值就是對應的投射屬性。
    _屬性名稱 = PropertyWrapper 類型。
    $屬性名稱 = _屬性名稱.projectedValue
    屬性名稱 = _屬性名稱.wrappedValue

直接設定底線屬性來啟動

  • 通常在除了 wrapperValue 以外的值不是固定的時候使用。

限制

  • 被裝飾的屬性不能是計算屬性。
  • 被裝飾的屬性不能是全域屬性。
  • 被裝飾的屬性不能是 lazy、weak 或 unowned 的。
  • PropertyWrapper 類型本身和 wrappedValue、projectedValue 必須要有同樣的 access control level。
  1. Property Wrapper 的用途是什麼?
    => 打包可重複利用的屬性存取行為(set、get、willSet、didSet),用簡便的語法加在屬性上。
  2. Property Wrapper 對屬性的唯一要求是什麼?
    => 有一個可以 get 的 wrappedValue 屬性。
  3. 透過 Property Wrapper 產生的底線和$版本屬性是什麼?
    => 底線是 Wrapper 本身,$版本的是 projectedValue(只有有設定時才會出現)。

影片連結:https://youtu.be/EBNZF-UbBv0?si=vq50ns4M1i3IDkPZ


上一篇
Day27-計算屬性 & 屬性觀察 & lazy 屬性
下一篇
Day29-Enum 介紹 & 相關常用 Protocol
系列文
自學swift語法30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言